package com.xique.door.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.xique.door.bean.domain.AccessDevice;
import com.xique.door.bean.domain.AccessDeviceV1;
import com.xique.door.bean.domain.User;
import com.xique.door.bean.request.AccessDevice.HouseSearchDeviceRequest;
import com.xique.door.bean.search.AccessDeviceListSearch;
import com.xique.door.bean.search.device.DeviceListSearch;
import com.xique.door.bean.vo.ParkInfoIssueVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 门禁设备Service接口
 *
 * @author ww
 * @date 2021-06-10
 */
public interface IAccessDeviceService
{
    /**
     * 查询门禁设备
     *
     * @param id 门禁设备ID
     * @return 门禁设备
     */
    AccessDevice selectAccessDeviceById(Long id);

    /**
     * 查询门禁设备
     *
     * @param ids 门禁设备ID
     * @return 门禁设备
     */
    List<AccessDevice> selectAccessDeviceByIds(List<Long> ids);

    /**
     * 查询门禁设备，包含设备楼栋信息
     * @author shd
     * @date 2022/3/10 10:44
     * @param ids
     * @return java.util.List<com.xique.door.bean.domain.AccessDevice>
     */
    List<AccessDevice> selectAccessDeviceWithBuildByIds(List<Long> ids);

    /**
     *
     * @author shd
     * @date 2021/7/5 8:58
     * @param ids 门禁设备ID
     * @param status 门禁设备状态
     * @return java.util.List<com.jzy.oms.access.device.bean.domain.AccessDevice>
     */
    List<AccessDevice> selectAccessDeviceByIds(List<Long> ids, String status);


    /**
     * 查询门禁设备列表
     *
     * @param accessDevice 门禁设备
     * @return 门禁设备集合
     */
    List<AccessDevice> selectAccessDeviceList(AccessDevice accessDevice);

    /**
     * 新增门禁设备
     *
     * @param accessDevice 门禁设备
     * @return 结果
     */
    int insertAccessDevice(AccessDevice accessDevice);

    /**
     * 修改门禁设备
     *
     * @param accessDevice 门禁设备
     * @return 结果
     */
    int updateAccessDevice(AccessDevice accessDevice);

    /**
     * 批量删除门禁设备
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    int deleteAccessDeviceByIds(List<Long> ids);

    /**
     * 根据id集合查询门禁设备列表
     *
     * @return 门禁设备集合
     */
     List<AccessDevice> selectAccessDeviceListIds(List<Long> ids,AccessDevice accessDevice);


    /**
     * 查询用户的设备集合
     * @param user
     * @return
     */
    List<AccessDevice> selectAccessDeviceListByUser(User user);



    /**
     * 查询门禁设备列表
     *
     * @param search 门禁设备
     * @return 门禁设备集合
     */
    List<AccessDeviceV1> selectAccessDeviceList(AccessDeviceListSearch search);



    /**
     * 批量删除门禁设备
     *
     * @param ids 需要删除的门禁设备ID
     * @return 结果
     */
    public int deleteAccessDeviceByIds(Long[] ids);

    /**
     * 删除门禁设备信息
     *
     * @param id 门禁设备ID
     * @return 结果
     */
    public int deleteAccessDeviceById(Long id);

    /**
     * 根据sn查询门禁设备
     * @author shd
     * @date 2022/2/15 14:30
     * @param sn
     * @return com.jzy.oms.access.device.bean.domain.AccessDevice
     */
    AccessDevice selectAccessDeviceBySn(String sn);



    List<AccessDevice> selectAccessDevicesByHouseIds(HouseSearchDeviceRequest request);

    /**
     * 设备列表
     * @author shd
     * @date 2022/3/11 9:06
     * @param search
     * @return com.baomidou.mybatisplus.core.metadata.IPage<com.xique.door.bean.domain.AccessDeviceV1>
     */
    IPage<AccessDeviceV1> selectDeviceListV1(DeviceListSearch search);

    /**
     * 获取全视通设备列表
     * @author shd
     * @date 2022/4/21 9:32
     * @param search
     * @return java.util.List<com.xique.door.bean.domain.AccessDevice>
     */
    List<AccessDeviceV1> selectFreeviewDeviceList(DeviceListSearch search);


    List<ParkInfoIssueVO> selectIssueAccessDevice(String districtName);

    List<ParkInfoIssueVO>  selectIssuedAccessDevice (List<Long> accessDeviceids);
}
